package xju.rjxy.shop.service;

import xju.rjxy.shop.model.domain.User;
import xju.rjxy.shop.model.dto.LoginDTO;
import xju.rjxy.shop.model.dto.RegisterDTO;
import xju.rjxy.shop.model.dto.UserUpdateDTO;
import xju.rjxy.shop.model.vo.UserVO;
import xju.rjxy.shop.model.vo.UserWithGamesVO;

import java.util.List;

/**
 * 用户服务接口
 */
public interface IUserService {
    /**
     * 获取用户列表
     */
    List<UserVO> getUserList();
    
    /**
     * 用户登录
     */
    User login(LoginDTO loginDTO);
    
    /**
     * 用户注册
     */
    User register(RegisterDTO registerDTO);
    
    /**
     * 根据ID获取用户信息
     */
    User getUserById(Integer id);
    
    /**
     * 更新用户信息
     */
    boolean updateUserInfo(User user);
    
    /**
     * 重置密码
     * @param phoneNumber 手机号
     * @param username 用户名
     * @param newPassword 新密码
     * @return true-成功，false-失败
     */
    boolean  resetPassword(String phoneNumber, String username, String newPassword);
    
    /**
     * 更新用户信息（通过DTO）
     * @param userUpdateDTO 用户信息更新DTO
     * @return true-成功，false-失败
     */
    boolean updateUserInfoByDTO(UserUpdateDTO userUpdateDTO);
    
    /**
     * 上传头像
     * @param userId 用户ID
     * @param avatarUrl 头像URL
     * @return true-成功，false-失败
     */
    boolean uploadAvatar(Integer userId, String avatarUrl);
    
    /**
     * 充值余额
     * @param userId 用户ID
     * @param amount 充值金额
     * @return true-成功，false-失败
     */
    boolean rechargeBalance(Integer userId, Double amount);
    
    /**
     * 根据用户名或手机号查找用户ID
     */
    Integer findUserIdByUsernameOrPhone(String keyword);

    /**
     * 根据用户名或手机号查找完整用户信息
     */
    UserVO findUserVOByUsernameOrPhone(String keyword);
    
    /**
     * 根据用户名或手机号查找包含游戏库的完整用户信息
     * @param keyword 用户名或手机号
     * @return 包含游戏库的用户信息
     */
    UserWithGamesVO findUserWithGamesByUsernameOrPhone(String keyword);
}
